# 安装包 cvzone
'''
numpy==1.26.4
opencv-python == 4.9.0.08
'''
import cv2
import pickle

# 定义每个停车位的宽度和高度
width, height = 130, 60

# 尝示读取本地文件保存的停车位置
try:
    with open('CarParkPos', 'rb') as f:
        posList = pickle.load(f)
except:
    # 如果文件不存在或读取失败，初始化一个空列表
    posList = []

    '''
    event :鼠标事件类型，x y：鼠标事件发生的坐标位置
    flags: 事件标志 params 参数 传递额外的数据
    当鼠标点击 左键的时候会添加停车标记
    点右键就是取消停车标记
    每次修改后都会自动保存位置列表  CarParkPos.pkl
    '''


def mouseClick(event, x, y, flags, params):
    # 点击左键 添加标记
    if event == cv2.EVENT_LBUTTONDOWN:
        # 将当前得的标记保存 保存到posList
        posList.append((x, y))

    # 点击右键删除现有的停车标记
    if event == cv2.EVENT_RBUTTONDOWN:
        # 遍历所有标记的位置
        for i, pos in enumerate(posList):
            x1, y1 = pos
            # 检查点击的位置是否为某个矩形区域
            if x1 < x < x1 + width and y1 < y < y1 + height:
                # 从列表中删除标记
                posList.pop(i)
    # 将更新后的位置列表进行保存，使用二进制写入文档中
    with open('CarParkPos', 'wb') as f:
        # 使用pickle将位置序列化并写入文件中
        pickle.dump(posList, f)


while True:
    img = cv2.imread('../data/tcw.png')

    # 在图片上绘制所有已标记的停车位
    for pos in posList:
        # 参数： 图像，左上角坐标 右下角 颜色 线条
        cv2.rectangle(img, pos, (pos[0]+width, pos[1]+height), (255, 0, 255), 2)
        index =posList.index(pos)
        cv2.putText(img, str(index), (pos[0],pos[1]-5), cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255),1)
    cv2.imshow('img', img)
    # 设置鼠标的回调函数
    cv2.setMouseCallback('img', mouseClick)
    key = cv2.waitKey(1)
    if key == 27:  # 按键esc退出
        break
cv2.destroyAllWindows()
